# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/3 19:41 
@Author  : ZhangShenao 
@File    : nlp.py 
@Desc    : 简单的自然语言处理
"""
import re


def nlp():
    """
    简单的自然语言处理
    读取in.txt中的内容,统计词频,并将结果输出到out.txt问价中
    """

    # 读取in.txt中的内容,返回文本
    content = read_content()

    # 统计词频,返回词频字典
    word_dict = word_count(content)

    # 将词频字典写入out.txt文件
    write_result(word_dict)


def read_content() -> str:
    """读取in.txt中的内容,返回文本"""

    with open('in.txt', 'r') as f:
        content = f.read()

    print('文件内容读取成功！')
    return content


def word_count(text: str) -> list:
    """统计text文本中的词频,生成词频字典"""

    # 去除标点符号和换行符
    text = re.sub(r'[^\w ]', ' ', text)

    # 统一转换成小写
    text = text.lower()

    # 按照空格分割文本
    words = text.split(' ')

    # 过滤空白单词
    words = filter(None, words)

    # 遍历单词列表,统计词频
    word_dict = {}
    for word in words:
        if word not in word_dict:
            word_dict[word] = 1
        else:
            word_dict[word] += 1

    # 按照词频排序
    word_cnt = sorted(word_dict.items(), key=lambda x: x[1], reverse=True)

    # 返回词频结果
    return word_cnt


def write_result(word_cnt: list):
    """将统计的词频字典写入out.txt文件中"""

    with open('out.txt', 'w') as f:
        for word, count in word_cnt:
            f.write(f'{word}:{count}\n')

    print('词频结果写入成功！')


if __name__ == '__main__':
    nlp()
